package br.uniceub.fsw.util;

import java.util.ArrayList;

/**
 *<p align='justify'>
 * Classe que trata das mensagem de confirmacao
 * a serem exibidas ao usuario apo's uma acao
 * bem sucedida. Note os dois construtores:
 * é possível 'criar' uma nova mensagem de confirmacao ao usuario
 * passando como parametro um
 * objeto String ou <i>setando</i> a descricao da confirmacao.
 * <br/>
 * Exemplos:<br/>
 *     
 * ConfirmacaoVO confirmacao = new ConfirmacaoVO("Minha mensagem."); -> Usando o método construtor
 * 
 * <br/>OU<br/>
 * 
 * ConfirmacaoVO confirmacao = new ConfirmacaoVO(); -> Usando o método <i>set</i><br/>
 * confirmacao.setDsConfirmacao("Minha mensagem.");
 * </p>
 * 
 * @author sergiofernandomuniz
 * @version 1.0
 * @see BaseFacade, TratamentoErros, Validacao.
 * 
 */
public class ConfirmacaoVO {
    
    private String dsConfirmacao;
    private static final String CAMINHO_IMAGEM_CONFIRMACAO = "";
    
    
    /**
     * 
     * @param mensagemDeConfirmacao
     * @return Objeto ConfirmacaoVO com a mensagem passada
     */
    public ConfirmacaoVO(String mensagemDeConfirmacao){
        
        if(!ConfirmacaoVO.verificaSeConfirmacaoEstaNulaOuVazia(dsConfirmacao)){
            
            this.setDsConfirmacao(mensagemDeConfirmacao);

        }
        
    }
    
    public ConfirmacaoVO(){
        
        
        
    }
    
    
    /**
     * @param Mensagem de confirmacao.
     * @return Uma div com a(s) mensagem(ns) de confirmacao ao usua'rio.<br/> 
     * Exemplo: Os dados foram alterados com sucesso.
     * 
     */
    public static StringBuffer montaMensagemConfirmacao(String dsConfirmacao){
        
        StringBuffer sb = new StringBuffer();
        
        sb.append("<ul class='confirmaAlteracao'>");
        sb.append("<li>");
        sb.append(dsConfirmacao);
        sb.append("</li>");
        sb.append("</ul>");
        
        return sb;
        
    }

    public static StringBuffer montaMensagemConfirmacao(ConfirmacaoVO confirmacao){

        StringBuffer sb = new StringBuffer();

        sb.append("<ul class='confirmaAlteracao'>");
        sb.append("<li>");
        sb.append(confirmacao.getDsConfirmacao().toString());
        sb.append("</li>");
        sb.append("</ul>");

        System.out.println(sb);
        return sb;

    }
    
    
    /**
     * @return  uma mensagem generica (padrao) de
     * confirmacao apos o usuario submeter
     * os dados.<br/>
     * Esse método é invocado quando a mensagem de confirmacao
     * é gene'rica. Essa escolha é definida pelo programador.
     * <br />
     * @return Uma div contendo:<br/>
     *      <p><i>"Os dados foram alterados com sucesso!"</i></p>
     * 
     */
    public StringBuffer montaMensagemConfirmacaoPadrao(){
        
        StringBuffer sb = new StringBuffer();
        
        sb.append("<div>");
        sb.append("<img src='"+ CAMINHO_IMAGEM_CONFIRMACAO +"'>");
        sb.append("Os dados foram alterados com sucesso.");
        sb.append("</div>");
        
        return sb;
        
    }
    
    public static boolean validaConfirmacao(String dsConfirmacao, 
            ArrayList<ConfirmacaoVO> listaMensagensConfirmacao)
    
    {
        
        if((!ConfirmacaoVO.verificaSeConfirmacaoEstaNulaOuVazia(dsConfirmacao))&&
                !ConfirmacaoVO.verificaSeConfirmacaoJaExisteNaListaConfirmacao
                (dsConfirmacao, listaMensagensConfirmacao))
        {
            
            return true;
            
        }else{
            
            return false;
            
        }
        
    }
    
    protected static boolean verificaSeConfirmacaoJaExisteNaListaConfirmacao(String dsConfirmacao, 
                ArrayList<ConfirmacaoVO> listaMensagensConfirmacao){
        
        ConfirmacaoVO novaConfirmacao = new ConfirmacaoVO();
        
        boolean confirmacaoEncontrada = false;
        
        novaConfirmacao.setDsConfirmacao(dsConfirmacao);
        
        for(int i = 0; i < listaMensagensConfirmacao.size(); i++){
            
            ConfirmacaoVO confirmacaoExistente = listaMensagensConfirmacao.get(i);
            
            if(novaConfirmacao.getDsConfirmacao().equals(confirmacaoExistente.getDsConfirmacao())){
                
                confirmacaoEncontrada = true;
                
                break;        
                
            }
            
            if(!confirmacaoEncontrada){
                
                return false;
                
            }
                
        }
        
        return true;
            
    }
    
    public static boolean verificaSeConfirmacaoEstaNulaOuVazia(String dsConfirmacao){
        
        if((dsConfirmacao == null) || (dsConfirmacao.trim().length() == 0)){
            
        return true;
            
        }
        
        return false;
        
    }

    public String getDsConfirmacao() {
        return dsConfirmacao;
    }

    public void setDsConfirmacao(String dsConfirmacao) {
        this.dsConfirmacao = dsConfirmacao;
    }

}
